#ifndef __VrAudioMix_H__
#define __VrAudioMix_H__

#include <stdint.h>

class AngleAlgorithm;
class AudioBuffQueue;

class VrAudioMix
{
public:
    /**
     清理缓存

     @return 0表示失败
     */
    int clean();
    
    //设置音频个数
    int initFormat(int size,float timePerByte);
    //设置角度
	/**
	 设置当前头盔旋转的角度

	 @param angle 旋转角度，单位：角度

	 @return 0表示失败
	 */
	int setAngle(float angle);
    
    //插入数据
	/**
	 插入音频帧

	 @param data               数据地址
	 @param len                数据长度
	 @param streamIndex        音频流id
	 @param presentationTimeUs 该帧的播放时间pts，单位微秒

	 @return 0表示失败
	 */
	int inputBuff(uint8_t* data, uint32_t len, int streamIndex, int64_t presentationTimeUs);
    

    int outputNotMixBuff(uint8_t** out_data,uint32_t* out_dataLen);
    
    int outputBuff(uint32_t in_maxLen,uint8_t** out_data,uint32_t* out_dataLen);
    
    
    int64_t getFrontPresentationTimeUs();

    
    uint32_t getCacheCount();
    
    bool mixScenesAudioData(uint8_t* in_buff, int in_buffLen,
                                                uint8_t** out_buff,uint32_t* out_buffLen);
    
    
    bool getMixAudioData(int64_t in_sampleTimeUs,
                         uint8_t** out_buff,uint32_t* out_buffLen);
    /**
     获取已解码未混合的数据的pts
     
     @param out_sampleTimeUs 输出参数，返回该帧的pts，单位微秒
     @return 成功返回true，失败返回false
     */
    bool outputSampleTimeUs(int64_t* out_sampleTimeUs);
    
    
public:
    VrAudioMix();
    ~VrAudioMix();

private:

    
	AngleAlgorithm* _angleAlgorithm;
	AudioBuffQueue* _audioBuffQueue;

	int _old_indexA;
	int _old_indexB;


	float _old_proportionA;
	float _old_proportionB;
    
    float _timePerByte;
    int _curFrameOffset;
    
    uint8_t* _mixBuff;
    uint32_t _mixLen;
};


#endif	//__VrAudioMix_H__
